// 对象类型 object {}
var a;
a = function () {
};
a = {};
// 对象类型约束
// ? 类型声明时, 表示可选属性
var b;
// b = {}
// b = {name: 123}
// 带可选属性, 两种赋值都对
b = { name: 'xyx', c: 123 };
b = { name: 'abc' };
// 必须有 name, [属性名: 字符串属性名], 其它任意属性还可以有多个
var c;
c = { name: 'ooo' };
c = { name: 'kkk', a: 1, b: 2 };
// 函数, 限制函数参数, 返回值的类型
// let d: Function => let d: object
var d;
// d = function(a, b, c) { return a + b} 不符合d的类型约束
d = function (a, b) {
    return a + b;
};
// 数组, 类型约束
var e;
// e = ['1', 'b', 3]
e = ['1', 'b', '3'];
var f;
// 约束 string 类型数组
var g;
// 元祖 tuple 固定长度的数组
var h;
// h = ['abc']
h = ['abc', 123]; // 固定长度和类型
// 枚举 enum  key-value 不可修改的值
var Gender;
(function (Gender) {
    Gender[Gender["Female"] = 0] = "Female";
    Gender[Gender["Male"] = 1] = "Male";
})(Gender || (Gender = {}));
var i;
i = { name: 'rose', gender: Gender.Male };
console.log(i);
